An I2C bus, also written as I2C bus, is a serial bus. The bus is mostly used for communication between different ICs in a system. I2C compatible busses are for example the SM bus (system management bus) and the display data channel bus. Other examples of I2C compatible busses are the ACCESS bus, the power management bus (PM bus) and the 2-wire interface bus (TWI). Here, the term “I2C bus” refers to an I2C or compatible bus. An I2C bus comprises a serial clock line (SCL) and a serial data line (SDA).
In a system that employs and I2C bus, there is a master and one or more slaves coupled to the I2C bus. Each slave is generally identified by a unique address to allow individual communication between the master and each slave. Data is transmitted on the I2C bus in bytes (usually 8 bits), but there are also systems with that employ 10 bit bytes. Within the I2C standard, an address length is the number of bits in one byte minus one bit (i.e., 7 or 9 bits), where the remaining bit is a read/write bit indicating whether the master requests read or write access. Typically, slaves have an address which is either fixed or of can be changed using dedicated address pins.
Address assignment to the slaves in a master/slave system using an I2C bus should be carefully planned. Manufacturers should decide which I2C slave addresses are to be assigned to newly developed I2C slave devices. For example, today, different part numbers exist for I2C slave devices having the same functionality but different address areas. One solution used for avoiding an address conflict on an I2C bus is to install I2C switches which split the bus into multiple sub-busses. However, this can require an additional circuit and more software overhead since the switch is controlled using the I2C bus itself. Additionally, a switch may not be sufficient if a lot of I2C slaves having the same address are within a system.